package com.gitee.cirnochat.login.service;


import com.baomidou.mybatisplus.extension.service.IService;
import com.gitee.cirnochat.login.model.dto.DeviceInfo;
import com.gitee.cirnochat.login.model.entity.LoginDevice;
import com.gitee.cirnochat.login.model.vo.req.LoginDeviceUpdateRequest;
import com.gitee.cirnochat.login.model.vo.resp.LoginDeviceVo;
import jakarta.validation.constraints.NotEmpty;

import java.util.List;

/**
* @author FlanChan
* @description 针对表【login_device(登陆设备)】的数据库操作Service
* @createDate 2025-05-28 19:21:28
*/
public interface LoginDeviceService extends IService<LoginDevice> {

    /**
     * 异步保存或更新登录设备信息
     *
     * @param deviceId   设备ID
     * @param ipAddress  IP地址
     * @param deviceInfo 设备信息
     * @param userId     用户ID
     */
    void saveOrUpdateLoginDeviceAsync(String deviceId, String ipAddress, DeviceInfo deviceInfo, Long userId);

    /**
     * 异步删除登录设备信息
     *
     * @param deviceId  设备ID
     * @param userId    用户ID
     */
    void deleteLoginDeviceByDeviceIdAsync(String deviceId, Long userId);

    /**
     * 获取指定用户的登录设备列表
     *
     * @param userId    用户ID
     */
    List<LoginDeviceVo> getLoginDevicesByUserId(Long userId);


    /**
     * 更新登录设备信息
     *
     * @param req 登录设备更新数据传输对象
     * @param userId                用户ID
     */
    void updateLoginDevice(LoginDeviceUpdateRequest req, Long userId);

    /**
     * 删除指定用户的登录设备
     *
     * @param deviceId  设备ID
     * @param userId    用户ID
     */
    void deleteLoginDeviceByUserId(String deviceId, Long userId);

    /**
     * 批量删除指定用户的登录设备
     *
     * @param deviceIds 设备ID列表
     * @param userId    用户ID
     */
    void deleteBatchLoginDevice(@NotEmpty(message = "设备ID不能为空") List<String> deviceIds, Long userId);


    /**
     * 删除除当前设备以外的所有登录设备
     *
     * @param deviceId  当前设备ID
     * @param userId    用户ID
     */
    void deleteAllLoginDevicesExceptCurrentByUserId(String deviceId, Long userId);

}
